function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {//函数名不要动
  // 以下可编辑
  const ifrs = dom.getElementsByTagName("iframe");
  const frs = dom.getElementsByTagName("frame");
  if (ifrs.length) {
    for (let i = 0; i < ifrs.length; i++) {
      const dom = ifrs[i].contentDocument.body.parentElement;
      iframeContent += scheduleHtmlProvider(iframeContent, frameContent, dom);
    }
  }
  if (frs.length) {
    for (let i = 0; i < frs.length; i++) {
      const dom = frs[i].contentDocument.body.parentElement;
      frameContent += scheduleHtmlProvider(iframeContent, frameContent, dom);
    }
  }
  if (!ifrs.length && !frs.length) {
    return dom.querySelector('body').outerHTML
  }
  if (dom === document) {
    return document.getElementsByTagName('html')[0].innerHTML + iframeContent + frameContent
  }
  return iframeContent + frameContent;
}
// 别忘了加async
async function scheduleHtmlProvider() {
  // 此步为必须，用于加载这个工具，后续会增加更多方法
  await loadTool('AIScheduleTools')
  // 使用它们的时候务必带上await，否则没有系统alert的时停效果
  await AIScheduleAlert('这是一条提示信息')
  // Prompt的参数比较多，所以传了个对象，最后会返回用户输入的值
  const userInput = await AISchedulePrompt({
    titleText: '提示', // 标题内容，字体比较大，超过10个字不给显示的喔，也可以不传就不显示
    tipText: '这是一条提示信息', // 提示信息，字体稍小，支持使用``达到换行效果，具体使用效果建议真机测试，也可以不传就不显示
    defaultText: '默认内容', // 文字输入框的默认内容，不传会显示版本号，所以空内容要传个''
    validator: value => { // 校验函数，如果结果不符预期就返回字符串，会显示在屏幕上，符合就返回false
      console.log(value)
      if (value === '1') return '这里的结果不可以是1'
      return false
  }})
}
async function scheduleHtmlProvider() {
  await loadTool('AIScheduleTools')
  // 使用Fetch请求教务的接口
  try {
    const res = await fetch('baidu.com')
    // 假设这个res是个JSON
    return JSON.stringify(res)
  } catch (error) {
    console.error(error)
    await AIScheduleAlert(error.message)
    return 'do not continue'
  }
}